package com.InterfaceIsolation;


/**
 * 接口隔离案列一：
 * 接口：Interface1
 * B类和D类实现Interface1接口
 * A类通过接口使用B类，但是只会用到operation1、operation2、operation3这三个方法
 * C类通过接口使用D类，但是只会用到operation1、operation4、operation5这三个方法
 * 这样就出现问题了：A中实现的operation4、operation5方法是多余的实现，并没有用到
 *    同理C中实现的operation2、operation3法是多余的实现，并没有用到
 * 解决方案：我们可以将接口拆分，达到接口细化的效果
 */
public class Solation1 {

    public static void main(String[] args) {

    }
}

/**
 * 接口
 */

interface Interface1{
    public void operation1();
    public void operation2();
    public void operation3();
    public void operation4();
    public void operation5();


}

/**
 * B类实现了Interface1接口
 */
class B implements Interface1{

    public void operation1() {

        System.out.println("B 实现了Interface1接口 并重写了operation1方法 ");
    }

    public void operation2() {
        System.out.println("B 实现了Interface1接口 并重写了operation2方法 ");
    }

    public void operation3() {
        System.out.println("B 实现了Interface1接口 并重写了operation3方法 ");
    }

    public void operation4() {
        System.out.println("B 实现了Interface1接口 并重写了operation4方法 ");
    }

    public void operation5() {
        System.out.println("B 实现了Interface1接口 并重写了operation5方法 ");
    }
}
/**
 * D类实现了Interface1接口
 */
class D implements Interface1{
    public void operation1() {
        System.out.println("D 实现了Interface1接口 并重写了operation1方法 ");
    }

    public void operation2() {
        System.out.println("D 实现了Interface1接口 并重写了operation2方法 ");
    }

    public void operation3() {
        System.out.println("D 实现了Interface1接口 并重写了operation3方法 ");
    }

    public void operation4() {
        System.out.println("D 实现了Interface1接口 并重写了operation4方法 ");
    }

    public void operation5() {
        System.out.println("D 实现了Interface1接口 并重写了operation5方法 ");
    }
}
/**
 * A类通过接口，去使用(依赖)B类，但是只会用到operation1、operation2、operation3这三个方法
 */
class A{
    public void dependcie(Interface1 i){
        i.operation1();
        i.operation2();
        i.operation3();
    }
}
/**
 * C类通过接口，去使用(依赖)D类，但是只会用到operation1、operation4、operation5这三个方法
 */
class C{
    public void dependcie(Interface1 i){
        i.operation1();
        i.operation4();
        i.operation5();
    }
}
